#ifndef _ELEMENTS_ALEMENT_H_
# define _ELEMENTS_ALEMENT_H_

# include "config.h"
# include <SDL/SDL.h>
# include "Utils\\Surface.h"
# include "Utils\\Rect.h"

NS_BEGIN(SDL)
	NS_BEGIN(ELEMENTS)

	class AElement
	{
	protected:
		UTILS::Surface* m_surface;
		UTILS::Rect m_position;
		bool m_hidden;
		bool m_disabled;

	protected:
		AElement();
		AElement(AElement const& _element);
	public:
		virtual ~AElement();

	public:
		AElement& operator=(AElement const&);
		bool operator==(AElement const& _aelement) const;
		bool operator!=(AElement const& _aelement) const;

	public:
		virtual bool Draw(SDL_Surface* _screen) = 0;
		virtual void SetPosition(Sint16 _x, Sint16 _y) = 0;
		virtual void SetPosition(UTILS::Rect const& _position) = 0;
		virtual void Move(Sint16 _offsetX, Sint16 _offsetY) = 0;
		virtual void Move(UTILS::Rect const& _offset) = 0;

		UTILS::Surface* GetSurface() const;
		void SetSurface(UTILS::Surface* _surface);
		UTILS::Rect const& GetPosition() const;
		bool GetHidden() const;
		void SetHidden(bool _value);
		bool GetDisabled() const;
		void SetDisabled(bool _value);
		virtual UTILS::Rect GetSize() const;

	public:
		__declspec(property(get=GetSurface, put=SetSurface)) UTILS::Surface* surface;
	};

	NS_END(ELEMENTS)
NS_END(SDL)

#endif // _ELEMENTS_ALEMENT_H_